home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / MISC / MAG09.ZIP / SPRITES.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  2010-12-05  |  2.8 KB  |  127 lines

  1. Unit Sprites;
  2.  
  3. { Version 1.0 }
  4.  
  5. Interface
  6.  
  7. Var MinX,MaxX:Integer;
  8.     MinY,MaxY:Integer;
  9.  
  10. Procedure GetImage(x1,y1,x2,y2:Word;Var Img:Pointer;Where:Word);
  11. Procedure KillImage(Var Img:Pointer);
  12. Procedure PutImage(X,Y:Word;Var Img:Pointer;Where:Word);
  13. Procedure PutImage_C(X,Y:Integer;Var Img:Pointer;Where:Word);
  14. Procedure SaveImage(Var F:File;Img:Pointer);
  15. Procedure LoadImage(Var F:File;Var Img:Pointer);
  16.  
  17. Implementation
  18.  
  19. Uses Mode13h;
  20.  
  21. Procedure GetImage(x1,y1,x2,y2:Word;Var Img:Pointer;Where:Word);
  22. Var Dx,Dy:Word;
  23.     A,B:Word;
  24.     Segm,Offs:Word;
  25. Begin
  26.      Dx:=Abs(x2-x1)+1;
  27.      Dy:=Abs(y2-y1)+1;
  28.      GetMem(Img,Dx*Dy+4);
  29.      Segm:=Seg(Img^);
  30.      Offs:=Ofs(Img^);
  31.      Move(Dx,Mem[Segm:Offs],2);
  32.      Move(Dy,Mem[Segm:Offs+2],2);
  33.      Offs:=Offs+4;
  34.      For A:=y1 to y2 Do
  35.      For B:=x1 to x2 Do
  36.      Begin
  37.           Mem[Segm:Offs]:=GetPixel(B,A,Where);
  38.           Inc(Offs);
  39.      End;
  40. End;
  41.  
  42. Procedure KillImage(Var Img:Pointer);
  43. Var Dx,Dy:Word;
  44.     Segm,Offs:Word;
  45. Begin
  46.      Segm:=Seg(Img^);
  47.      Offs:=Ofs(Img^);
  48.      Move(Mem[Segm:Offs],Dx,2);
  49.      Move(Mem[Segm:Offs+2],Dy,2);
  50.      FreeMem(Img,Dx*Dy+4);
  51. End;
  52.  
  53. Procedure PutImage(X,Y:Word;Var Img:Pointer;Where:Word);
  54. Var Dx,Dy:Word;
  55.     A,B:Word;
  56.     Segm,Offs:Word;
  57. Begin
  58.      Segm:=Seg(Img^);
  59.      Offs:=Ofs(Img^);
  60.      Move(Mem[Segm:Offs],Dx,2);
  61.      Move(Mem[Segm:Offs+2],Dy,2);
  62.      Offs:=Offs+4;
  63.      For A:=Y To Y+Dy-1 Do
  64.      Begin
  65.           Move(Mem[Segm:Offs],Mem[Where:A*320+X],Dx);
  66.           Offs:=Offs+Dx;
  67.      End;
  68. End;
  69.  
  70. Procedure PutImage_C(X,Y:Integer;Var Img:Pointer;Where:Word);
  71. Var Dx,Dy:Word;
  72.     A,B:Word;
  73.     Segm,Offs:Word;
  74. Begin
  75.      Segm:=Seg(Img^);
  76.      Offs:=Ofs(Img^);
  77.      Move(Mem[Segm:Offs],Dx,2);
  78.      Move(Mem[Segm:Offs+2],Dy,2);
  79.      Offs:=Offs+4;
  80.      A:=Y;
  81.      While (A<=Y+DY-1) And (A<MaxY) Do
  82.      Begin
  83.           B:=X;
  84.           While (B<=X+DX-1) And (B<MaxX) Do
  85.           Begin
  86.                If (X>=MinX) And (Y>=MinY) Then
  87.                  PutPixel(B,A,Mem[Segm:Offs],Where);
  88.                Inc(Offs);
  89.                Inc(B);
  90.           End;
  91.           Inc(A);
  92.      End;
  93. End;
  94.  
  95. Procedure SaveImage(Var F:File;Img:Pointer);
  96. Var Dx,Dy:Word;
  97.     Segm,Offs:Word;
  98. Begin
  99.      Segm:=Seg(Img^);
  100.      Offs:=Ofs(Img^);
  101.      Move(Mem[Segm:Offs],Dx,2);
  102.      Move(Mem[Segm:Offs+2],Dy,2);
  103.      BlockWrite(F,Img^,Dx*Dy+4);
  104. End;
  105.  
  106. Procedure LoadImage(Var F:File;Var Img:Pointer);
  107. Var Dx,Dy:Word;
  108.     Segm,Offs:Word;
  109. Begin
  110.      BlockRead(F,Dx,2);
  111.      BlockRead(F,Dy,2);
  112.      GetMem(Img,Dx*Dy+4);
  113.      Segm:=Seg(Img^);
  114.      Offs:=Ofs(Img^);
  115.      Move(Dx,Mem[Segm:Offs],2);
  116.      Move(Dy,Mem[Segm:Offs+2],2);
  117.      Offs:=Offs+4;
  118.      BlockRead(F,Mem[Segm:Offs],Dx*Dy);
  119. End;
  120.  
  121. Begin
  122.      MinX:=0;
  123.      MaxX:=319;
  124.      MinY:=0;
  125.      MaxY:=199;
  126. End.
  127.